 /*
    MegaShorter, the ultimate url-shorting tool
    Copyright (C) 2011  Ivan I. Kolesnikov

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "shorterfactory.h"

ShorterFactory::ShorterFactory(QSharedPointer<QSettings> s, QObject *parent) :
    QObject(parent), settings(s)
{
    QList<QSharedPointer<ShorterCreator>> list;

    list.append(QSharedPointer<ShorterCreator>(new JMpShorterCreator));
    list.append(QSharedPointer<ShorterCreator>(new ToLyShorterCreator));
    list.append(QSharedPointer<ShorterCreator>(new TweakTkShorterCreator));
    list.append(QSharedPointer<ShorterCreator>(new VGdShorterCreator));
    list.append(QSharedPointer<ShorterCreator>(new IsGdShorterCreator));
    list.append(QSharedPointer<ShorterCreator>(new TinyURLShorterCreator));
    list.append(QSharedPointer<ShorterCreator>(new ClckShorterCreator));
    list.append(QSharedPointer<ShorterCreator>(new TeTlShorterCreator));

    QListIterator<QSharedPointer<ShorterCreator>> i(list);
    while (i.hasNext())
    {
        QSharedPointer<ShorterCreator> c(i.next());
        QSharedPointer<Shorter> sh = c->create(settings);
        creators[sh->name()] = c;

    }
}

QStringList ShorterFactory::shorters()
{
    return creators.keys();
}

QSharedPointer<Shorter> ShorterFactory::getShorter(const QString &name)
{
    if (creators.contains(name))
        return creators[name]->create(settings);
    else
        return QSharedPointer<Shorter>();
}


